'- frequencies are innacurate 

function lstinf$(a$,b$,c$)
  adra=1:adrb=1:blngt=len(b$):d$=""
  while adrb<=blngt
    if mid$ (a$,adra,1)=mid$ (b$,adrb,1) then:adrb+=1:end if
    adra=adra+1
    end while
  while mid$(a$,adra,1)<>left$(c$,1)
    d$=d$+mid$(a$,adra,1):adra=adra+1
    end while
  lstinf$=d$
  end function

function vldc(a$)
  t0$="!"+a$+".0.0.0."
  t1$=lstinf$(t0$,"!",".")
  t2$=lstinf$(t0$,".",".")
  t3=10^(len(t2$))
  vldc=val(t1$)+(val(t2$)/t3)
  end function

dim chfq[16],chvl[16]

finp$="_.csv"
if argc>2 then:finp$=argv(2):end if


print"56676D20"
print"FFFFFF00"
print"71010000"
print"0000000000000000"
print"2F023000"
print"34DA3000"
print"0000000000000000"
print"3C000000"
print"000000000000000000000000"
print"AC000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00000000000000000000000000000000"
print"00127A00"
print"00000000000000000000000000000000"
print"00000000"
print"BD1C01        ;- saa1099: register 1C: frequency reset, sound enable"
print"BD143F        ;- saa1099: frequency enable %00111111"
print"BD1500        ;- saa1099: noise enable %00000000"
print"BD1840        ;- saa1099: envelope generator 0"
print"BD1940        ;- saa1099: envelope generator 1"
print"BD0800        ;- saa1099: frequency channel 0"
print"BD0900        ;- saa1099: frequency channel 1"
print"BD0A00        ;- saa1099: frequency channel 2"
print"BD0B00        ;- saa1099: frequency channel 3"
print"BD0C00        ;- saa1099: frequency channel 4"
print"BD0D00        ;- saa1099: frequency channel 5"
print"BD1000        ;- saa1099: octave channels 0 and 1"
print"BD1100        ;- saa1099: octave channels 2 and 3"
print"BD1200        ;- saa1099: octave channels 4 and 5"
print"BD0000        ;- saa1099: volume channel 0"
print"BD0100        ;- saa1099: volume channel 1"
print"BD0200        ;- saa1099: volume channel 2"
print"BD0300        ;- saa1099: volume channel 3"
print"BD0400        ;- saa1099: volume channel 4"
print"BD0500        ;- saa1099: volume channel 5"

lct=0

dim octtm[16]:dim octou[16]

open finp$ for input as #1
while eof(1)=0
  file input #1,txrd$
  setcaption("b:"+str$(lct)):lct+=1
  if mid$(txrd$,1,1)="[" then:
    if mid$(txrd$,2,1)="f" then:
      chid=val(mid$(txrd$,3,2))
      chid=chid mod 6 'saa1099 has 6 channels
      chfqv=vldc(lstinf$(txrd$,":","]"))

      freq=16.35159783129*2^chfqv

      'chfqv2=int((chfqv*256)+24)
      'chfqv2=int((chfqv*256)-256+24) '- <- wrong
      'chfqvoc=int(chfqv2/256)        '- <- wrong
      'chfqvnt=chfqv2 mod 256

      chfqvoc=8-int( log(15625/freq)/log(2) )
      chfqvnt=511-int(((15625 *(2^chfqvoc) )/freq))

      octtm[chid]=chfqvoc mod 16
      octou[int(chid/2)]=octtm[int(chid/2)*2+1]*16+octtm[int(chid/2)*2]
      txrgo$="BD"+right$("00"+hex$(8+chid),2)+right$("00"+hex$(chfqvnt),2)
      txrgo$+=" BD"+right$("00"+hex$(16+int(chid/2)),2)+right$("00"+hex$(octou[int(chid/2)]),2)
      print ucase$(txrgo$)
      end if
    if mid$(txrd$,2,1)="v" then:
      chid=val(mid$(txrd$,3,2))
      chid=chid mod 6 'saa1099 has 6 channels
      chvlv=vldc(lstinf$(txrd$,":","]"))*0x10
      chvlv=int(chvlv) mod 0x10
      chchrvl$=right$("00"+hex$(chvlv*0x11),2)
      txrgo$="BD"+right$("00"+hex$(chid),2)+chchrvl$
      print ucase$(txrgo$)
      end if
    if mid$(txrd$,2,3)="wvb" then:
      wvblv=vldc(lstinf$(txrd$,":","]"))
      wvblv2=wvblv*44100
      wvblv3a=wvblv2 mod 65536
      wvblv3b=int(wvblv2/65536)
      wvblv3as$=ucase$(right$("0000"+hex$(wvblv3a),4))
      for ii=1 to wvblv3b:print"61FFFF":next
      print "61"+mid$(wvblv3as$,3,2)+mid$(wvblv3as$,1,2)
      end if
    end if
  wend
print:print "66":print
close #1


'from Simon Owen
'  freq=(15625*(2^octave))/(511-note)
'  octave=8-int(log2(15625/freq))
'  note=511-int(((15625<<octave)/freq))
'octave=8-int( log(15625/freq)/log(2) )
'note=511-int(((15625 *(2^octave) )/freq))






'16.35159783129*2^((9/12)+4) = 440hz




